<template>
  <div>
    <h1>人员列表</h1>
    <h3 style="color:red">Count组件的求和是：{{sum}}</h3>
    <h3>列表第一个人的名字：{{firstPersonName}}</h3>
    <input type="text" v-model="name" placeholder="请输入名字">
    <button @click="add">添加</button>
    <button @click="addWang">添加一个姓王的人</button>
    <button @click="addPersonServer">添加一个名字来自于服务器的人</button>
    <ul>
        <li v-for="p in personList" :key="p.id">{{p.name}}</li>
    </ul>
  </div>
</template>

<script>
import {nanoid} from 'nanoid'
import {mapState, mapGetters} from 'vuex'
import {mapActions, mapMutations} from 'vuex'
export default {
    name: 'Person',
    data() {
        return {
            name: '' //输入的名字
        }
    },
    computed: {
        //使用vuex模块化，不简写时，$store.state后需要先加模块名才能取到数据
        personList() {
            return this.$store.state.personAbout.personList
        },
        sum() {
            return this.$store.state.countAbout.sum
        },
        firstPersonName() {
            //注意一个坑：模块getters中值获取方法和state不同，变量名的中间是/，必须这么写
            return this.$store.getters['personAbout/firstPersonName']
        }
        //简写
        //...mapState(['personList'])
    },
    methods: {
        add() {
            const personObj = {
                id: nanoid(),
                name: this.name,
            }
            //使用vuex模块化，不简写时，调用disptch和commit的操作名前需要加 模块名的路径
            this.$store.commit('personAbout/ADD_PERSON', personObj)
            //清空输入框
            this.name = ''
        },
        addWang() {
            const personObj = {
                id: nanoid(),
                name: this.name,
            }
            this.$store.dispatch('personAbout/addPersonWang', personObj)
            this.name = ''
        },
        addPersonServer() {
            this.$store.dispatch('personAbout/addPersonServer')
            this.name = ''
        }
    }
}
</script>

<style scoped>
</style>